package com.wending.main_page;

import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentPagerAdapter;
import android.support.v4.app.FragmentStatePagerAdapter;
import android.view.ViewGroup;

import java.util.List;

/**
 * Created by ${张英杰} on 2017/1/26.
 */

public class MyViewPagerAdapter extends FragmentStatePagerAdapter {
    private List<Fragment> mData;
    public MyViewPagerAdapter(FragmentManager fm, List<Fragment> Data) {
        super(fm);
        this.mData=Data;
    }

    public void setData(List<Fragment> Data){
        this.mData=Data;
        notifyDataSetChanged();
    }
    @Override
    public Fragment getItem(int position) {
        return mData!=null?mData.get(position):null;
    }

    @Override
    public int getCount() {
        return mData!=null?mData.size():0;
    }

    @Override
    public int getItemPosition(Object object) {
//        这样既可达到一般情况下要求的效果。
//        存在的问题：
//        这不是PagerAdapter中的Bug，通常情况下，
//        调用notifyDataSetChanged方法会让ViewPager通过Adapter的getItemPosition方法查询一遍所有child view，
//        这种情况下，所有child view位置均为POSITION_NONE，表示所有的child view都不存在，
//        ViewPager会调用destroyItem方法销毁，并且重新生成，加大系统开销，并在一些复杂情况下导致逻辑问题。
//        特别是对于只是希望更新child view内容的时候，造成了完全不必要的开销。
//        更有效地方法：
//        更为靠谱的方法是因地制宜，根据自己的需求来实现notifyDataSetChanged的功能，
//        比如，在仅需要对某个View内容进行更新时，在instantiateItem()时，
//        用View.setTag方法加入标志，在需要更新信息时，通过findViewWithTag的方法找到对应的View进行更新即可。
//        return super.getItemPosition(object);
        return POSITION_NONE;
    }

    @Override
    public Object instantiateItem(ViewGroup container, int position) {
        return super.instantiateItem(container, position);
    }
}
